package pta.test0809.综合小测验;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;

public class Main {

    public static void main (String [] args) {

        Scanner scanner = new Scanner(System.in);

        //创建自己的帮助类（帮助类在下面...）
        Helper helper = new Helper();

        while(scanner.hasNext()) {

            //接收字符串用于下面的判断
            String str = scanner.next();

            if ("fib".equals(str)) {

                helper.fib(scanner.nextInt());

            } else if ("sort".equals(str)) {

                //先将接下来的数字放在集合里面
                List<Integer> sortList = new ArrayList<>();
                while (scanner.hasNextInt()) {
                    sortList.add(scanner.nextInt());
                }

                //再将集合转换为数组传入函数
                helper.sort(sortList.toArray(new Integer[0]));

            } else if ("search".equals(str)) {

                helper.search(scanner.nextInt());

            } else if ("getBirthDate".equals(str)) {

                int n = scanner.nextInt();
                for (int i = 0; i < n; i++) {
                    String identityCardNum = scanner.next();
                    helper.getBirthDate(identityCardNum);
                }

            } else {
                //字符串为其他时退出程序
                System.out.println("exit");
                System.exit(0);
            }
        }
    }
}


class Helper {

    /**
     * 使用此数组存储下来sort后的数组，用于之后的search操作
     * */
    private Integer[] sortedArray;

    /**
     * 斐波拉契的处理方法
     * 这里使用了正向递推的方法实现斐波拉契数列
     * 实现斐波拉契数列的方法有好几种，网上资料很多，这里不再赘述
     * */
    void fib (int n) {

        if (n == 1) {
            System.out.println("1");
            return;
        } else if (n == 2) {
            System.out.println("1 1");
            return;
        }

        int[] num = new int[n];
        num[0] = 1; num[1] = 1;

        System.out.print("1 1");
        for (int i = 2; i < n; i++) {
            num[i] = num[i - 1] + num[i - 2];
            System.out.print(" " + num[i]);
        }
        System.out.println();
    }

    /**
     * 使用Java自带的排序算法进行排序
     * */
    void sort(Integer nums[]) {

        Arrays.sort(nums);
        sortedArray = nums;
        System.out.println(Arrays.toString(nums));
    }

    /**
     * 查询数组中是否含该元素
     * 注意：当数组中不存在查找值时，
     *      Arrays.binarySearch(int[] a, int key)的返回值不一定为-1
     *      所以需要判断一下：当返回值小于0时，则输出-1；当返回值大于0时，则输出返回值。
     * */
    void search(int searchNum) {
        int ret = Arrays.binarySearch(sortedArray, searchNum);
        if (ret < 0) {
            System.out.println(-1);
        } else {
            System.out.println(ret);
        }
    }

    /**
     * 使用字符串分割的方法提取生日信息
     * */
    void getBirthDate(String identityCardNum) {

        System.out.println(identityCardNum.substring(6, 10) + "-"
                + identityCardNum.substring(10, 12) + "-" + identityCardNum.substring(12, 14));

    }
}


